#include <bits/stdc++.h>
using namespace std;

#define int long long
#define ls (o<<1)
#define rs (o<<1 | 1)
const int N = 1e5+5;
int n,w;
int a[N], t[N<<2], lz[N<<2];

void update(int s, int e, int o, int x){
    t[o] += (e-s+1) * x;
    lz[o] += x;
}

void pushup(int o){
    t[o] = t[ls] + t[rs];
}

void pushdown(int s, int e, int o){
    if ( lz[o]==0 ) return;
    int mid = (s+e) / 2;
    update(s,mid,ls,lz[o]);
    update(mid+1,e,rs,lz[o]);
    lz[o] = 0;
}

void build(int s=1, int e=n, int o=1){
    if ( s==e ){
        t[o] = a[s];    
        return;    
    }

    int mid = (s+e) / 2;
    build(s,mid,ls);
    build(mid+1,e,rs);
    pushup(o);
}

void add(int l, int r, int x, int s=1, int e=n, int o=1){
    if ( l<=s && e<=r ){
        update(s,e,o,x);
        return;
    }

    pushdown(s,e,o);
    int mid = (s+e) / 2;
    if (l<=mid) add(l,r,x,s,mid,ls);
    if (mid+1<=r) add(l,r,x,mid+1,e,rs);
    pushup(o);
}

int query(int l, int r, int s=1, int e=n, int o=1){
    if ( l<=s && e<=r ){
        return t[o];
    }

    pushdown(s,e,o);
    int res = 0;
    int mid = (s+e) / 2;
    if (l<=mid) res += query(l,r,s,mid,ls);
    if (mid+1<=r) res += query(l,r,mid+1,e,rs);
    pushup(o);
    return res;
}

signed main(){
    memset(a,0,sizeof(a));
    cin >> n >> w;
    for ( int i=1; i<=n; i++ ){
        int x,b; cin >> x >> b;
        a[x] += b;
    }
    build();

    int ans = 0;
    if (w)
        for ( int i=w; i<=n; i++ ){
            ans = max(ans,query(i-w+1,i));
        }
    cout << ans << '\n';
}
